// 菜单条.
package main

import (
	"fmt"
	app "gitee.com/go_888/xcgui/xcgui/app"
	wapi "gitee.com/go_888/xcgui/xcgui/wapi"
	widget "gitee.com/go_888/xcgui/xcgui/widget"
	window "gitee.com/go_888/xcgui/xcgui/window"
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

var (
	a  *app.X结构_全局API
	w  *window.Window
	mb *widget.X结构_菜单条
)

func main() {
	// 1.初始化UI库
	a = app.X创建(true)
	a.X启用DPI(true)
	a.X启用自动DPI(true)
	// 2.创建窗口
	w = window.X创建窗口(0, 0, 570, 400, "MenuBar", 0, xcc.X窗口样式_默认样式)
	w.X设置边大小(1, 30, 1, 1)

	// 创建菜单条
	mb = widget.X创建菜单条(5, 32, w.X取宽度()-10, 30, w.X句柄)
	// 菜单条禁用按钮自动宽度
	mb.X启用自动宽度(false)
	// 菜单条禁用绘制边框
	mb.X启用绘制边框(false)
	// 菜单条禁用绘制焦点
	mb.X启用绘制焦点(false)

	// 添加菜单条按钮
	mb.X添加按钮("文件(F)")
	mb.X添加按钮("编辑(E)")
	mb.X添加按钮("搜索(S)")
	mb.X添加按钮("视图(V)")
	mb.X添加按钮("编码(N)")
	mb.X添加按钮("语言(L)")
	mb.X添加按钮("设置(T)")
	mb.X添加按钮("工具(O)")

	// 取消绘制菜单条按钮边框, 注册按钮单击事件, 菜单被选择事件
	for i := int32(0); i < mb.X取子对象数量(); i++ {
		hele := mb.X取子对象并按索引(i)
		xc.X元素_启用绘制边框(hele, false)
		xc.X元素_注册事件C1(hele, xcc.X元素事件_按钮_点击, onMenuBarBnClick)
		xc.X元素_注册事件C1(hele, xcc.X元素事件_菜单_项选择, onMenuSelect)
	}

	// 3.显示窗口
	w.X显示方式(xcc.SW_SHOW)
	// 4.运行程序
	a.X运行()
	// 5.释放UI库
	a.X退出()
}

func onMenuBarBnClick(hEle int, pbHandled *bool) int {
	fmt.Println(xc.X按钮_取文本(hEle) + "被单击了")
	// 创建菜单
	menu := widget.X创建菜单()
	// 一级菜单
	menu.X添加项(10001, "item1", 0, xcc.X菜单项标识_正常)
	menu.X添加项(10002, "item2", 0, xcc.X菜单项标识_正常)

	// 获取按钮坐标
	var rc xc.X结构_矩形
	xc.X元素_取窗口客户区坐标DPI(hEle, &rc)
	// 转换到屏幕坐标
	pt := wapi.X坐标{X: rc.X左, Y: rc.X下}
	wapi.X客户区坐标转换屏幕坐标(w.X取HWND句柄(), &pt)
	// 弹出菜单
	menu.X弹出(w.X取HWND句柄(), pt.X, pt.Y, hEle, xcc.X菜单弹出方向_左上角)
	return 0
}

// 菜单被选择事件
func onMenuSelect(hEle int, nID int32, pbHandled *bool) int {
	fmt.Println(xc.X按钮_取文本(hEle)+"下的菜单被选择:", nID)
	return 0
}
